package com.mvc.controller;

import hbm.Marcas;
import hbm.MarcasDAO;
import hbm.Proveedor;
import hbm.ProveedorDAO;

import java.io.IOException;
import java.util.ArrayList;

import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class MarcaController extends HttpServlet {

	/**
	 * 
	 */

	public class MarcaProveedor {
		private String marca;
		private String proveedor;

		// constructor

		public String getNombreMarca() {
			return marca;
		}

		public String getNombreProveedor() {
			return proveedor;
		}

		public void setNombreMarca(String nombreMarca) {
			this.marca = nombreMarca;
		}

		public void setNombreProveedor(String nombreProveedor) {
			this.proveedor = nombreProveedor;
		}

	}

	private static final long serialVersionUID = 1L;

	@Override
	@SuppressWarnings("unchecked")
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String opcion = request.getParameter("opcion");

		if (opcion != null && opcion.equals("elimina")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<Marcas> listaMarcas = new MarcasDAO().findAll();
				request.getSession().setAttribute("listadoMarcas", listaMarcas);
				response.sendRedirect("./jsp/eliminarMarca.jsp");
			} else {
				String idMarcas = request.getParameter("idMarca");
				Marcas marca = new Marcas();
				marca.setId(Integer.parseInt(idMarcas));
				Session session = new MarcasDAO().getSession();
				Transaction tx = session.beginTransaction();
				Object findAAgain = session.merge(marca);
				session.delete(findAAgain);
				tx.commit();
				session.close();
				response.sendRedirect("./jsp/mantenimientoMarca.jsp");
			}
		}

		if (opcion != null && opcion.equals("marca")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Guardar")) {

				Marcas marca = new Marcas();
				String nombreMarcas = request.getParameter("txtnombre");
				Integer idProveedor = Integer.parseInt(request
						.getParameter("idProveedor"));
				Proveedor proveedorSeleccionado = new ProveedorDAO()
						.findById(idProveedor);
				marca.setProveedor(proveedorSeleccionado);
				marca.setNombre(nombreMarcas);

				Session session = new MarcasDAO().getSession();

				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(marca);
				tx.commit();
				session.close();
				List<Marcas> listaMarcas = new MarcasDAO().findAll();
				request.getSession().setAttribute("listadoMarcas", listaMarcas);
				response.sendRedirect("./jsp/mantenimientoMarca.jsp");
			}
		}

		if (opcion != null && opcion.equals("consulta")) {
			Session session = new MarcasDAO().getSession();

			List<Marcas> listaMarcas = new MarcasDAO().findAll();
			// List<Proveedor> listaProveedor = new ArrayList<Proveedor>();
			List<MarcaProveedor> listaMarcaProveedor = new ArrayList<MarcaProveedor>();

			Iterator itr = listaMarcas.listIterator();
			if (listaMarcas.size() != 0) {
				while (itr.hasNext()) {
					MarcaProveedor mp = new MarcaProveedor();
					Marcas m = (Marcas) itr.next();
					mp.setNombreMarca(m.getNombre());
					Proveedor idProveedor = m.getProveedor();
					Proveedor proveedorIndex = new ProveedorDAO()
							.findById(idProveedor.getId());
					mp.setNombreProveedor(proveedorIndex.getNombre());
					// listaProveedor.add(proveedorIndex);

					listaMarcaProveedor.add(mp);
				}
			}

			request.getSession().setAttribute("listaMarcasProveedor",
					listaMarcaProveedor);
			session.close();
			response.sendRedirect("./jsp/mantenimientoMarca.jsp");
		}

		if (opcion != null && opcion.equals("edita")) {
			String boton = request.getParameter("boton");
			if (boton == null) {
				List<Marcas> listaMarcas = new MarcasDAO().findAll();
				request.getSession().setAttribute("listadoMarcas", listaMarcas);
				response.sendRedirect("./jsp/seleccionMarca.jsp");
			}
		}

		if (opcion != null && opcion.equals("filtrar")) {
			Integer idMarca = Integer.parseInt(request.getParameter("idMarca"));
			Marcas marcaSeleccionada = new MarcasDAO().findById(idMarca);
			request.getSession().setAttribute("idMarcaSeleccionada",
					marcaSeleccionada.getId());
			request.getSession().setAttribute("nombreMarcaSeleccionada",
					marcaSeleccionada.getNombre());
			List<Proveedor> listaProveedores = new ProveedorDAO().findAll();
			request.getSession().setAttribute("listadoProveedores",
					listaProveedores);
			response.sendRedirect("./jsp/editarMarca.jsp");
		}

		if (opcion != null && opcion.equals("listarProveedores")) {
			List<Proveedor> listaProveedores = new ProveedorDAO().findAll();
			request.getSession().setAttribute("listadoProveedores",
					listaProveedores);

			response.sendRedirect("./jsp/ingresoMarca.jsp");
		}

		if (opcion != null && opcion.equals("editando")) {
			String boton = request.getParameter("boton");
			if (boton != null && boton.equals("Editar")) {
				Integer idMarca = Integer.parseInt(request
						.getParameter("idMarca"));
				String nombreMarca = request.getParameter("txtnombre");
				Marcas marcaSeleccionada = new MarcasDAO().findById(idMarca);
				Integer idProveedor = Integer.parseInt(request
						.getParameter("idProveedor"));
				Proveedor proveedorSeleccionado = new ProveedorDAO()
						.findById(idProveedor);

				marcaSeleccionada.setProveedor(proveedorSeleccionado);
				marcaSeleccionada.setNombre(nombreMarca);
				Session session = new MarcasDAO().getSession();

				Transaction tx = session.beginTransaction();
				session.saveOrUpdate(marcaSeleccionada);
				tx.commit();
				session.close();
				List<Marcas> listaMarcas = new MarcasDAO().findAll();
				request.getSession().setAttribute("listadoMarcas", listaMarcas);
				response.sendRedirect("./jsp/mantenimientoMarca.jsp");
			}
		}
	}

}
